package org.zachary.imitation.raft;

/**
 * {@link State} 中定义了节点的状态，既然有未初始化的状态，显然节点就应该有初始化节点的方法；既然有初始化节点的方法，显然就应该有销毁节点的方法，或者说应该有让节点终止工作的方法。
 *
 * 要实现一个框架，框架中某些关键组件的生命周期是一定要考虑到的。因此这里定义了生命周期接口 {@link Lifecycle}，然后让 {@link Node} 接口继承这个生命周期接口。这样，{@link NodeImpl} 实现了 Node 接口时，就可以直接实现 Lifecycle 接口中的方法。
 *
 * @see State
 * @see Node
 *
 * Created by guozhaokun on 2024/8/30 20:01.
 */
public interface Lifecycle<T> {

	/** 初始化动作，泛型 <T> 表示初始化时所依据的配置对象（配置参数），亦即根据 <T> 里的内容来进行初始化 */
	boolean init(final T options);

	/** 销毁动作 */
	void shutdown();

}
